import enum
from flask import make_response, jsonify


class ErrorCodes(enum.Enum):
    """ 错误码
    """
    UNKNOWN_ERROR = 999, 'Unknown Error'
    BAD_REQUEST = 400, 'Bad Request'
    INVALID_PARAMETERS = 400, 'Invalid Parameter(s)'
    INVALID_CONTENT_TYPE = 402, 'Invalid Content Type'
    INPUT_TEXT_TOO_LONG = 403, 'Input Text Too Long'
    INPUT_ENCODING_ERROR = 404, 'Input Encoding Error'
    UNAUTHORIZED = 401, 'Unauthorized'
    PAYMENT_REQUIRED = 402, 'Payment Required'
    FORBIDDEN = 403, 'Forbidden'
    NOT_FOUND = 404, 'Not Found'
    METHOD_NOT_ALLOWED = 405, 'Method Not Allowed'
    NOT_ACCEPTABLE = 406, 'Not Acceptable'
    PROXY_AUTHENTICATION_REQUIRED = 407, 'Proxy Authentication Required'
    REQUEST_TIME_OUT = 408, 'Request Time-out'
    CONFLICT = 409, 'Conflict'
    GONE = 410, 'Gone'
    LENGTH_REQUIRED = 411, 'Length Required'
    PRECONDITION_FAILED = 412, 'Precondition Failed'
    REQUEST_ENTITY_TOO_LARGE = 413, 'Request Entity Too Large'
    REQUEST_URI_TOO_LARGE = 414, 'Request-URI Too Large'
    UNSUPPORTED_MEDIA_TYPE = 415, 'Unsupported Media Type'
    REQUESTED_RANGE_NOT_SATISFIABLE = 416, 'Requested Range Not Satisfiable'
    EXPECTATION_FAILED = 417, 'Expectation Failed'
    INTERNAL_SERVER_ERROR = 500, 'Internal Server Error'
    NOT_IMPLEMENTED = 501, 'Not Implemented'
    BAD_GATEWAY = 502, 'Bad Gateway'
    SERVICE_UNAVAILABLE = 503, 'Service Unavailable'
    GATEWAY_TIME_OUT = 504, 'Gateway Time-out'
    HTTP_VERSION_NOT_SUPPORTED = 505, 'HTTP Version not supported'

    def __init__(self, code: int, message: str):
        self.code = code
        self.message = message


def exception_response(code: ErrorCodes, message: str = ''):
    status_code = code.code
    message = message if message else code.message
    return make_response({'message': message}, status_code)


def success_response(data=None):
    if data is None:
        return jsonify(success=True)
    return jsonify(success=True, data=data)
